package com.cskaoyan.javase.array._4operation._1get;
/**
 * 获取数组中的最值(最大值和最小值)
 * 先假设某个元素(一般都是第一个)是最值,然后遍历数组比较,找到最终的最值
 * @since 10:07
 * @author wuguidong@cskaoyan.onaliyun.com
 */

import java.util.Arrays;
import java.util.Scanner;

/**
 * 参加快乐男声比赛,有10个评委打分,(去掉一个最高一个最低)求最后的平均成绩
 * 提示：用数组装这些分数，并找到最大值和最小值去掉他们，然后算平均值。
 * 要求：必须提供三个方法：求最大值，最小值，平均分
 *
 * 求数组的最大值/最小值：假设法，假设数组当中第一个元素是最值，然后遍历数组逐个比较，最终得到最值
 * 数组当中元素的平均值： 先求和，然后除以数组的长度（这道题应该除以8）
 * 数组的求和： 先设定一个和的变量（初始值0），然后遍历数组，累加
 *
 */
public class Demo {
    public static void main(String[] args) {
        // 定义double类型数组
        double[] scores = new double[10];
        // 给数组元素赋值
        /*Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 10; i++) {
            System.out.print("请输入第" + (i + 1) + "位评委的分数:");
            double score = sc.nextDouble();
            scores[i] = score;
        }
        System.out.println(Arrays.toString(scores));*/

        scores = new double[]{3, 4, 9, 6, 7, 8, 9, 10, 9, 10};
        System.out.println(getMaxScore(scores));
        System.out.println(getMinScore(scores));
        System.out.println(getAverageScore(scores, getMaxScore(scores), getMinScore(scores)));
    }

    // 求最大值
    public static double getMaxScore(double[] scores) {
        // 假设第一个分数是最高分
        double max = scores[0];
        // 增强for遍历分数数组
        for (double score : scores) {
            if (score > max) {
                // 成为新的最大值
                max = score;
            }
        }
        return max;
    }

    // 求最小值
    public static double getMinScore(double[] scores) {
        // 假设第一个分数是最低分
        double min = scores[0];
        // 增强for遍历分数数组
        for (double score : scores) {
            if (score < min) {
                // 成为新的最小值
                min = score;
            }
        }
        return min;
    }

    // 求平均值
    public static double getAverageScore(double[] scores, double max, double min) {
        // 先遍历求和
        double sumScores = 0;
        for (double score : scores) {
            sumScores += score;
        }
        return (sumScores - max - min) / 8;
    }
}
